﻿using System;
using System.Collections.Generic;
using System.Text;

namespace System.Data
{
    /// <summary>
    /// 命令对象参数信息
    /// </summary>
    public class CommandInfo
    {
        #region CommandText

        private string _commandText = string.Empty;
        /// <summary>
        /// 获取或设置针对数据源运行的文本命令。
        /// </summary>
        public string CommandText
        {
            get
            {
                if (_commandText == null)
                    _commandText = string.Empty;
                return _commandText;
            }
            set { _commandText = value; }
        }

        #endregion

        #region CommandTimeout

        /// <summary>
        /// 获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
        /// </summary>
        public int? CommandTimeout { get; set; }

        #endregion

        #region CommandType

        /// <summary>
        /// 指示或指定如何解释 System.Data.IDbCommand.CommandText 属性。
        /// </summary>
        public System.Data.CommandType? CommandType { get; set; }

        #endregion

        #region Parameters

        private List<IDataParameter> _parameters;
        /// <summary>
        /// 
        /// </summary>
        public List<IDataParameter> Parameters
        {
            get
            {
                if (_parameters == null)
                    _parameters = new List<IDataParameter>();
                return _parameters;
            }
            set { _parameters = value; }
        }


        #endregion

        #region Connection

        /// <summary>
        /// 获取或设置 System.Data.IDbCommand 的此实例使用的 System.Data.IDbConnection。
        /// </summary>
        public IDbConnection Connection { get; set; }

        #endregion

        #region Transaction

        /// <summary>
        /// 获取或设置在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。
        /// </summary>
        public IDbTransaction Transaction { get; set; }

        #endregion


        /// <summary>
        /// 更新 IDbCommand
        /// </summary>
        /// <param name="cmd"></param>
        public void Update(IDbCommand cmd)
        {
            //  如果命令有效
            if (cmd != null)
            {
                //  更新命令文本
                cmd.CommandText = this.CommandText;
                //  更新命令类型
                if (this.CommandType.HasValue)
                    cmd.CommandType = this.CommandType.Value;
                //  更新命令超时时间
                if (this.CommandTimeout.HasValue)
                    cmd.CommandTimeout = this.CommandTimeout.Value;
                //  更新命令的连接对象
                cmd.Connection = this.Connection;
                //  更新命令的事务对象
                cmd.Transaction = this.Transaction;
                //  更新命令的参数列表
                if (this.Parameters != null)
                {
                    foreach (IDataParameter parameter in this.Parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                }
            }
        }

        ///// <summary>
        ///// 
        ///// </summary>
        ///// <param name="dataAdapter"></param>
        //public void Update(System.Data.Common.DbDataAdapter dataAdapter)
        //{
        //    if (dataAdapter != null)
        //    {
        //        this.Update(dataAdapter.SelectCommand);
        //    }
        //}
    }
}
